iT邦幫忙

2023 iThome 鐵人賽

DAY 7
1
Modern Web

什麼!在網頁上也可以寫遊戲?系列 第 7

[Day 07] 事件表實作 - 檢查篇(下)

  • 分享至 

  • xImage
  •  

昨天我們介紹了檢查中的邏輯規則,包含 AND、OR,以及 NOT 的使用,而今天我們要來介紹檢查中的異類——迴圈型檢查。

迴圈型檢查

當我們需要在一次觸發事件時,就重複執行好幾次動作,我們就會用到這種檢查,又或是我們需要同時針對多個物件進行檢查,並針對該物件執行動作時,也會需要用到這種檢查,什麼意思呢?讓我來一一解釋。

首先就是在一次觸發事件時重複執行多次動作,還記得事件本身就有重複執行的功能嗎?但不要忘記了每次事件重複執行時,中間都會有一小段間隔,另外除了重複執行以外,迴圈還非常適合用來處理具有序列化的工作,有一個動作叫做 控制台輸出,就是可以在控制台內輸出任意文字訊息的動作,如果我今天想要在控制台輸出 1 ~ 100 的數字該怎麼辦?總不可能我在事件裡面塞 100 個動作,然後從 1 寫到 100 吧?......好吧,也許有人就是這麼有毅力,但我可沒有,所以我們需要更省力的方法。

針對數字的迴圈

For Index 設定視窗

在檢查目錄 迴圈 裡面,有一個叫做 For Index 的檢查,我們先看看這個檢查的說明文字。

以一個有Index變數,迴圈重覆執行事件中的動作。起始和結束Index數值都在迴圈範圍中。 for( index = startIndex ; index <= endIndex ; index += increment )

要理解這一段話就得先理解什麼叫做 Index 變數,我原本是想要特別找一天來介紹變數的,但無奈太多地方都會用到了,所以我還是先用最簡單的方式解釋一下好了。

各位可以把變數想像成一個 容器,這個容器裡面可以裝一些東西,在這裡我們通常會拿來裝一些數字,例如有個容器叫做 A,裡面裝著 20,還有個容器叫做 B,裡面裝著 22,然後我們還可以改變裡面的數字,例如讓 B + 1,B 就會變成 23,除此之外,我們還可以把容器裡面的東西拿出來用,像是多一個容器 C,裡面裝著 A + B,而因為 A 是 20,B 是 23,所以 C 就會是 43,因為 20 + 23 = 43,或是把 A 跟 B 組合在一起,變成 2023 等等。

結論就是變數就是一個具有名字的容器,並且我們可以在裡面儲存一些數字,而且還可以隨意更改裡面的數值,以及隨時拿出來運用,當然其實不只可以儲存數字,還有字串、布林值等等,不過這些之後在說。

回到 For Index,Index 變數其實就是一個名字取為 index 的容器而已,所以提示的意思就是在該檢查重複執行動作的時候,還會給我們一個叫做 index 的變數,名字是由 區域變數名稱:數值 決定的,所以我們也可以取其它名字,接著問題就來了,我怎麼知道它會執行多少次動作?這個變數可以做什麼?別擔心,我們慢慢來。

For Index 的執行次數

首先,該檢查會先讓 index = 起始數值,接著如果 index 不超過 結束數值 的話,它就會繼續往下運行其他檢查,並且根據 變化量 改變自己的數值,然後再檢查一次 index 有沒有超過結束數值,如果沒超過,就繼續重複剛才的事情,如果超過了,檢查就會停下來,否則它就會一直重複,直到超過為止。

也就是說假設起始數值 = 1結束數值 = 10變化量 = 1,那一開始 index 就會是 1,並且因為變化量的原因,每次執行完後都會加 1,最後當 index = 11 時,因為超過結束數值便停止了迴圈,所以最終算起來 1 ~ 10 總共執行了 10 次動作。

Index 變數的用途

有了這個變數就可以幫我們快速地完成一些事情,除了在控制台輸出 1 ~ 100 的數字以外,還有一些更有意義的事情,例如找出 135 的所有因數,嗯?你問我有意義在哪裡?可以幫我們寫數學作業啊!

因數:可以整除某一個數的數字,例如 10 / 5 = 2,所以 5 是 10 的因數。

For Index 範例事件

從上圖注意到了嗎,如果檢查中設置了迴圈,接下來再設置其他檢查的話,之後的檢查就會往內縮一排,代表這個檢查被包含在了迴圈之中,每次執行前它都會檢查一次,通過時才會執行動作。

For Index 中,我只設定了結束數值為 135,所以該檢查會從 0 開始加 1,一直加到 135。

比較數字設定

而在比較數字中,我寫了 135 % {index} == 0,在事件表中,有許多跟數字相關的欄位都可以直接寫一個數學式在裡面,當系統在讀取該欄位的資料時,就會先把裡面的數學式算一次,才會使用最後得到的數值結果,也就是說我如果寫 1 + 1,實際上系統就會讀出 2 這個值。

接著關於 {index}index 就是上面介紹很多次的變數,但我們在事件表中,如果想要讀取變數裡面的數值,就必須在變數名稱兩側加上大括號 {},所以 {} 只是為了讀取變數內容的一種寫法而已,如果 index 裡面裝的是 0,那 {index} 就代表 0 的意思。

然後是 %,可能要有接觸過程式的人才會看過這個符號,它是用來計算餘數的,代表的是前者被後者除以後的餘數,例如 10 % 5,因為 10 / 5 = 2 餘 0,所以 10 % 5 = 0,或是 13 / 5 = 2 餘 3,所以 13 % 5 = 3

最後回到 135 % {index} == 0 的部分,系統會優先帶入變數,接著再進行數學運算,最終得到結果,假設 index = 5,就會變成 135 % 5 == 0,最終變成 0 == 0,然後就通過檢查了,而因為通過檢查就代表該數字可以整除 135,是其因數,所以我們最後在控制台輸出 {index},同樣的系統會將 index 當下的數值帶入,並輸出到控制台上面,這樣我們就可以在控制台上面看到 135 的所有因數啦~

135 的因數:1、3、5、9、15、27、45、135。

針對物件的迴圈

讓我們回到 Day 5 的事件表中,還記得我們新增了四名敵人,並且分別設定了讓他們都會自動尋找玩家嗎?因為只有 4 名角色,所以可以一一設定,但萬一之後新增了十幾名,甚至更多的角色呢,光是想到還要新增那麼多動作就累了,所以這個時候就是迴圈登場的時候了。

找出所有角色設定

同樣的在迴圈目錄內,還有一個檢查叫做 找出所有角色,如上圖,為了篩選出所有要設定的敵人,角色描述的部分就跟計算人數一樣。

接著要注意的就是下方的 區域變數名稱:角色代碼 了,與 For Index 相同,這也是一個變數名稱,只是不同的是,這裡儲存的內容並不是數字,而是一串文字,我們一般稱之為 字串,而裡面儲存的是符合描述的角色代碼,也就是我們定義的 ai_1 ~ ai_4,因為符合描述的人數有 4 個,所以這個迴圈會執行 4 次,分別從第一位角色開始執行到最後一位。

看到這裡知道我們接下來要做什麼了嗎?沒錯!把變數裡面的角色代碼取出來,讓他們都執行一次 尋找前往目標

找出所有角色範例事件

動作裡面的設定都跟之前一樣,唯一不同的是,這次我們把角色代碼改成了 {instance},因為迴圈每次執行的時候都會把當下要執行的角色代碼儲存在 instance 裡面,所以只要讓系統讀取出來去執行動作,就可以讓每個角色都執行到同樣的動作啦~

CG 範例事件表

總結

今天主要介紹了迴圈的觀念,以及迴圈在檢查中的應用,分別有針對數列化相關的 For Index,還有針對多個物件進行檢查的找出所有角色,其實如果看目錄內的話還有其他像是 For Each、找出所有某屬性的格子,不過這些都是相同的觀念,暫時就不細講了。

除了迴圈以外,還順便提到了基本的變數概念,就是一個具有標籤的容器,可以隨時對裡面的內容物進行修改,或是讀取,其實能理解這個部分應該就已經懂變數的八成左右了,剩下的就是一些區域和型別的問題了,不過這些就等我們之後再談吧!


上一篇
[Day 06] 事件表實作 - 檢查篇(中)
下一篇
[Day 08] 事件表實作 - 觸發篇
系列文
什麼!在網頁上也可以寫遊戲?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言